package org.dicr.util.jds.gui;

import java.awt.*;

import javax.swing.*;

import org.dicr.event.*;

import com.borland.dx.dataset.*;

// import org.dicr.dbgui.*;

/***********************************************************************************************************************
 * @author Igor A Tarasov me@dicr.dn.ua
 * @version 021214
 **********************************************************************************************************************/
public class DataBrowserDetailsPanel extends DataPanel implements ColumnAware, ProgramListener {
	private static final long serialVersionUID = 1L;

	private JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);

	protected DataNavPanel navPanel = new DataNavListPanel();

	protected DataDetailPanel detailPanel = new DataDetailRowPanel();

	private String columnName = null;

	/*******************************************************************************************************************
	 * Конструктор
	 ******************************************************************************************************************/
	public DataBrowserDetailsPanel() {
		try {
			jbInit();
		} catch (Exception ex) {
			DicrExceptionHandler.handleException(ex, this);
		}
	}

	/*******************************************************************************************************************
	 * Инициализация
	 ******************************************************************************************************************/
	private void jbInit() {
		this.add(this.splitPane, BorderLayout.CENTER);
		this.splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
		this.splitPane.setOneTouchExpandable(true);
		this.splitPane.setContinuousLayout(true);
		this.splitPane.setLeftComponent(this.navPanel);
		this.splitPane.setRightComponent(this.detailPanel);
		this.controlPanel.setControlButtonsMask(0);
	}

	/*******************************************************************************************************************
	 * Устанавливает панель навигации
	 ******************************************************************************************************************/
	public void setNavPanel(DataNavPanel panel) {
		if (this.navPanel != panel) {
			if (this.navPanel != null) {
				this.navPanel.removeProgramListener(this);
				this.navPanel.setDataSet(null);
			}
			this.navPanel = panel;
			if (panel != null) {
				panel.addProgramListener(this);
				panel.setDataSet(this.dataset);
				if (panel.getColumnName() == null && this.columnName != null) panel.setColumnName(this.columnName);
			}
			this.splitPane.setLeftComponent(panel);
		}
	}

	/*******************************************************************************************************************
	 * Возвращает панель навигации
	 ******************************************************************************************************************/
	public DataNavPanel getNavPanel() {
		return this.navPanel;
	}

	/*******************************************************************************************************************
	 * Устанавливает панель детализации
	 ******************************************************************************************************************/
	public void setDetailPanel(DataDetailPanel panel) {
		if (this.detailPanel != panel) {
			if (this.detailPanel != null) {
				this.detailPanel.removeProgramListener(this);
				this.detailPanel.setDataSet(null);
			}
			this.detailPanel = panel;
			if (panel != null) {
				panel.setDataSet(this.dataset);
				panel.addProgramListener(this);
			}
			this.splitPane.setRightComponent(panel);
		}
	}

	/*******************************************************************************************************************
	 * Возвращает панель детализации
	 ******************************************************************************************************************/
	public DataDetailPanel getDetailPanel() {
		return this.detailPanel;
	}

	/*******************************************************************************************************************
	 * Устанавливает имя колонки навигации
	 ******************************************************************************************************************/
	@Override
    public void setColumnName(String theColumnName) {
		if (this.columnName != theColumnName && (this.columnName == null || theColumnName == null || this.columnName.compareTo(theColumnName) != 0)) {
			this.columnName = theColumnName;
			this.navPanel.setColumnName(theColumnName);
		}
	}

	/*******************************************************************************************************************
	 * Возвращает имя навигационной колонки
	 ******************************************************************************************************************/
	@Override
    public String getColumnName() {
		return this.columnName;
	}

	/*******************************************************************************************************************
	 * Установка источника данных
	 ******************************************************************************************************************/
	@Override
	public void setDataSet(DataSet theDataset) {
		if (this.dataset != theDataset) {
			super.setDataSet(theDataset);
			if (this.navPanel != null) this.navPanel.setDataSet(theDataset);
			if (this.detailPanel != null) this.detailPanel.setDataSet(theDataset);
		}
	}

	/*******************************************************************************************************************
	 * Проверка корректности состояния источника данных
	 ******************************************************************************************************************/
	@Override
	protected boolean isValidDataSetState() {
		return (super.isValidDataSetState() && this.columnName != null && this.dataset.hasColumn(this.columnName) != null);
	}

	/*******************************************************************************************************************
	 * Установка свойства редактируемости
	 ******************************************************************************************************************/
	@Override
	public void setEditable(boolean theEditable) {
		if (this.editable != theEditable) {
			super.setEditable(theEditable);
			this.navPanel.setEditable(theEditable);
			this.detailPanel.setEditable(theEditable);
		}
	}

	/*******************************************************************************************************************
	 * Обработчик программных событий
	 ******************************************************************************************************************/
	@Override
    public void eventPerformed(ProgramEvent event) {
	// NOP
	}
}
